package it.traveldream.ManagedBeans;

import it.traveldream.EJB.CityCountryBean;
import it.traveldream.EJB.DTO.CittaDTO;
import it.traveldream.EJB.DTO.StatoDTO;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


/**
 * 
 *  ManagedBean per la gestione delle citta (per gli autocomplete ed il filtering)
 * @author marco
 *
 */

@ManagedBean(name="cittaBean")
@SessionScoped
@FacesConverter(value="cittaConverter")
public class CityBean implements Converter {



	private ArrayList<CittaDTO> listaCittaFiltrate;
	

	@EJB
	private CityCountryBean cityEJB;

	public CityBean(){
		System.out.println("CityBean construttore");
		listaCittaFiltrate = new ArrayList<CittaDTO>();
	}

	
	/**
	 * Metodo utilizzato dagli autocomplete delle citta per visualizzare
	 * le possibili citta da scegliere
	 * 
	 * @param q - {@link String} settata dall'autocomplete per il filtering delle citta
	 * @return
	 */
	public List<CittaDTO> complete(String q){

		listaCittaFiltrate.clear();
		listaCittaFiltrate.addAll(cityEJB.getFilteredCitta(q));
		return listaCittaFiltrate;
	}


	/**
	 * 
	 * Metodo utilizzato dall'autocomplete per gestire la conversione da 
	 * Stringa nomeCitta a DTO della citta con nome q
	 */
	@Override
	public Object getAsObject(FacesContext context, UIComponent component,
			String q) {
		
		if(q.length()==0)
			return null;
		
		return cityEJB.getFilteredCitta(q).get(0);
	}

	/**
	 * 
	 * Metodo utilizzato dall'autocomplete per la conversiona da {@link CittaDTO} a
	 * {@link String} con il nome della citta.
	 */
	@Override
	public String getAsString(FacesContext context, UIComponent component,
			Object obj) {
		return ((CittaDTO) obj).getName();
	}





}
